home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 45 / Amiga Format CD45 (1999-09)(Future Publishing)(GB)(Track 1 of 2)[!][issue 1999-11].iso / -serious- / misc / mcread / original / wordwrap.c < prev   
C/C++ Source or Header  |  1999-08-09  |  3KB  |  135 lines

  1. /*    mcread: wordwrap.c
  2.     Copyright (C) 1991, Mike Gleason Jr & NCEMRSoft.
  3.     All Rights Reserved. */
  4.  
  5. #include <stdio.h>
  6. #include <string.h>
  7. #include "mcread.h"
  8.  
  9. char                *out, *maxwidth;
  10. char                lyne1[256];
  11. short                tab = 4, width = 78, pager = 0, linecount;
  12. #ifndef DO_NOT_MAP_HICHARS
  13. char                hibitTable[128][8] = {
  14. "A", "A", "C", "E", "N", "O", "U", "a",
  15. "a", "a", "a", "a", "a", "c", "e", "e",
  16. "e", "e", "i", "i", "i", "i", "n", "o",
  17. "o", "o", "o", "o", "u", "u", "u", "u",
  18. "*", "*", "c", "L", "S", "*", "P", "B",
  19. "(R)", "(C)", "(tm)", "'", "", "", "AE", "0",
  20. "oo", "+/-", "<=", ">=", "Y", "m", "d", "E",
  21. "PI", "pi", "|", "a", "o", "O", "ae", "o",
  22. "?", "!", "", "", "f", "", "", "<<",
  23. ">>", "...", " ", "A", "A", "O", "OE", "oe",
  24. "-", "--", "\"", "\"", "'", "'", "/", "",
  25. "y", "Y", "|", "", "<", ">", "fi", "fl",
  26. "", ".", ",", ",,", "o/oo", "A", "E", "A",
  27. "E", "E", "I", "I", "I", "I", "O", "O",
  28. "Apple", "O", "U", "U", "U", "I", "^", "~",
  29. "-", "", ".", ".", "", "", "", "" };
  30. #endif
  31.  
  32. int    wwInit()
  33. {
  34.     maxwidth = lyne1 + width;
  35.     out = lyne1;
  36. }    /* wwInit */
  37.  
  38.  
  39.  
  40.  
  41. int wwPutchar(c)
  42.     register int c;
  43. {
  44.     register short count;
  45.     
  46.     count = 1;
  47.     if (c == '\t' && tab > 0) {
  48.         count = tab - ((out - lyne1 - 0) % tab);
  49.         c = ' ';
  50.     } else if (c == '\r') {
  51.         /* We don't want raw CRs in the unix output. */ 
  52.         if (out == lyne1) {
  53.             putchar ((int)'\n');    /* Probably a blank line. */
  54.             if (CheckPage())
  55.                 return (1);                /* user canceled */
  56.         }
  57.         return (0);        
  58.     }
  59.     
  60.     /*    while we're at it, turn some common mac 8-bit chars into
  61.         acceptable 7-bit ASCII equivalents. */
  62.     if (EIGHTBIT(c)) {
  63. #ifndef DO_NOT_MAP_HICHARS
  64.         char *map;
  65.         for (map=hibitTable[(unsigned int)c - 128]; *map; map++)
  66.             if (wwPutchar ((int)*map))
  67.                 return (1);                    /* user skipped file */
  68.         return (0);
  69. #else
  70. #ifdef STRIP_HICHARS
  71.         else c &= 0x0080;
  72. #else
  73. #ifdef OMIT_HICHARS
  74.         return (0);
  75. #endif /* omit hichars */
  76. #endif /* strip hichars */
  77. #endif /* map hichars... sure wish elif would work on every compiler... */
  78.     } else if (NONPRINTING(c))
  79.         return (0);    /* don't bother printing a non-printing char. */
  80.     
  81.     while (--count >= 0) {
  82.         *out++ = c;
  83.         
  84.         if (out > maxwidth) {            /* word wrap */
  85.             for (*out='\0'; !isspace(*out); *out--)
  86.                 if (out == lyne1) break;
  87.             if (out == lyne1) {            /* word too long! */
  88.                 (void) puts (lyne1);
  89.             } else {
  90.                 *out++ = '\0';            /* null terminate string */
  91.                 (void) puts (lyne1);            /* spew wrapped line */
  92.                 (void) strcpy (lyne1, out);    /* wrap word onto new line */
  93.                 out = lyne1 + (int) strlen (lyne1);
  94.             }
  95.             if (CheckPage())
  96.                 return (1);                /* user canceled */
  97.             break;
  98.         }                                /* end word wrap */
  99.     }
  100.     return (0);
  101. }    /* wwPutchar */
  102.  
  103.  
  104.  
  105.  
  106.  
  107. int wwFlush()
  108. {
  109.     *out = '\0';
  110.     if (out > lyne1 && *lyne1) {
  111.         (void) puts (lyne1);
  112.         return (CheckPage());
  113.     }
  114.     return (0);
  115. }    /* wwFlush */
  116.  
  117.  
  118.  
  119.  
  120. int CheckPage()
  121. {
  122.     char crap[80];
  123.     if (++linecount >= pager && pager > 0) {        
  124.         linecount = 0;
  125.         (void) printf("...hit return to continue, q to cancel...");
  126.         (void) fflush(stdout);
  127.         (void) fgets (crap, 78, stdin);
  128.         if (*crap == 'q' || *crap == 'n')
  129.             return (1);
  130.     }
  131.     return (0);
  132. }
  133.  
  134. /* eof */
  135.